package com.workants.eboleta.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import com.workants.eboleta.model.Usuario;
import com.workants.eboleta.tools.StringMD;



public class DaoValidar {

	
private static DaoValidar instance;
	
	private DaoValidar(){
		
	}	
	
	public static DaoValidar getIntance(){
		
		if(instance == null){
			instance = new DaoValidar();
		}
		return instance;
	}

	public int validar(String codigo, String tipoImpuesto){
		
		//primero verificamos si la suscripcion no esta pendiente.
		// si rta == -1 no 
		String nombreImpuesto = "";
		
		if (tipoImpuesto.equalsIgnoreCase("1")){
			nombreImpuesto = "Impuesto automotor";
		}
		if (tipoImpuesto.equalsIgnoreCase("2")){
			nombreImpuesto = "Impuesto Inmobiliario";
		}
		if (tipoImpuesto.equalsIgnoreCase("3")){
			nombreImpuesto = "Impuesto Tasa de Higiene";
		}
		if (tipoImpuesto.equalsIgnoreCase("4")){
			nombreImpuesto = "Impuesto Derecho Ocupante";
		}
		if (tipoImpuesto.equalsIgnoreCase("5")){
			nombreImpuesto = "Impuesto Derecho Ocupante Tasa de Higiene";
		}
		
		
		
		String consulta = "select * from suscripciones where codigoPagoElectronico = ? and tipoImpuesto = ?";
		Vector<Object>datos = new Vector<Object>();
		datos.add(codigo);
		datos.add(nombreImpuesto);
		ResultSet rs = null;
		Conexion conexion;
		int rta = -1;		
	
		try {
			conexion = new Conexion();
			rs = conexion.queryConsulta(consulta, datos);
			if(rs.next()){ // suscripcion pendiente  
				rta = rs.getInt(5);
				return rta;
			}
			else {
					System.out.println("No esta suscripto por lo cual verificamos si metio bien los garfios");					
					datos.clear();				
					datos.add(codigo);
					if(tipoImpuesto.equalsIgnoreCase("1")){ //automotor 
					
					consulta = "select * from automotor where codigoRedLink = ?";									
					try {
						//conexion = new Conexion();						
						rs = conexion.queryConsulta(consulta, datos);
						if(rs.next()){
							rta = 2;
							return rta;
						} else {
							return 3;
						}
					} catch (SQLException e) {
						System.out.println("Error al verificar en impueto :" + tipoImpuesto);
						e.printStackTrace();
				}				
				
			}
					if(tipoImpuesto.equalsIgnoreCase("2")){//inmobiliario
				
						consulta = "select * from inmobiliario where nroPagoElectronico = ?";						
						try {
						//	conexion = new Conexion();
							rs = conexion.queryConsulta(consulta, datos);
							if(rs.next()){
								rta = 2;
								return rta;
							} else {
								return 3;
							}
						} catch (SQLException e) {
							System.out.println("Error al verificar en impueto :" + tipoImpuesto);
							e.printStackTrace();
						}
				
					}
					if(tipoImpuesto.equalsIgnoreCase("3")){ //tasa de higiene
				
						consulta = "select * from inmobiliario where nroPagoElecThu = ?";			
						try {
							//conexion = new Conexion();
							rs = conexion.queryConsulta(consulta, datos);
							if(rs.next()){
								rta = 2;
								return rta;
							} else {
								return 3;
							}
						} catch (SQLException e) {
							System.out.println("Error al verificar en impueto :" + tipoImpuesto);
							e.printStackTrace();
						}
				
					}
					if(tipoImpuesto.equalsIgnoreCase("4")){ //dereho de ocupante, se valida en tabla inmodiliario
				
						consulta = "select * from inmobiliario where nroPagoElectronico = ?";			
						try {
							//conexion = new Conexion();
							rs = conexion.queryConsulta(consulta, datos);
							if(rs.next()){
								rta = 2;
								return rta;
							} else {
								return 3;
							}
						} catch (SQLException e) {
							System.out.println("Error al verificar en impueto :" + tipoImpuesto);
							e.printStackTrace();
						}
						
					}
					if(tipoImpuesto.equalsIgnoreCase("5")){ //dereho de ocupante thu, se valida en tabla inmodiliario
						
						consulta = "select * from inmobiliario where nroPagoElecThu = ?";			
						try {
							//conexion = new Conexion();
							rs = conexion.queryConsulta(consulta, datos);
							if(rs.next()){
								rta = 2;
								return rta;
							} else {
								return 3;
							}
						} catch (SQLException e) {
							System.out.println("Error al verificar en impueto :" + tipoImpuesto);
							e.printStackTrace();
						}
						
					}	
			}
	
		}
		 catch (SQLException e) {
				System.out.println("Error al verificar suscripcion :" + tipoImpuesto);
				e.printStackTrace();
			}
	
	return rta;
	}

	public Usuario login(String nombreDeUsuario, String contrasenia) {
		
		
		String consulta = "select * from v_sesion where (nombreDeUsuario = ? and contrasenia = ? and estado = 1)";
		Vector<Object>datos = new Vector<Object>();
		datos.add(nombreDeUsuario);
		datos.add(generarSha(contrasenia));
		ResultSet rs = null;
		Conexion conexion = null;
		Usuario usuario = null;
		try {
			conexion = new Conexion();
			rs = conexion.queryConsulta(consulta, datos);
			if(rs.next()){
				usuario = new Usuario();
				usuario.setIdPerona(rs.getInt(6));
				usuario.setNombre(rs.getString(7));
				usuario.setApellido(rs.getString(8));
				usuario.setearPerfil(rs.getString(4));
			}
			else usuario = null;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(usuario);
		return usuario;
	}
	
	
	private String generarSha(String contrasenia) {
		
		contrasenia = StringMD.getStringMessageDigest(contrasenia, StringMD.SHA1);		
		return contrasenia;	
		}
}
